/* 把搜索的结果保存下来 */
/* 用export把方法暴露出来 */
/* 定义存储搜索的key  _search_定义内部使用的key */
const SEARCH_KEY = '_search_'
const SEARCH_MAX_LENGTH = 8

/* 插入方法     arr存储的数据  val传入存储的值  compare前后比较的函数  maxlen存入的最大值 */
function insertArray(arr, val, compare, maxlen) {
  //findIndex()函数也是查找目标元素，找到就返回元素的位置，找不到就返回-1。
  const index = arr.findIndex(compare)
  if (index === 0) {  // 数据为数组中的第一个数据 不做任何操作
    return
  }
  if (index > 0) {  // 数组中有这条数据并且不再第一个位置
    arr.splice(index, 1)  // 删掉这个数
  }
  arr.unshift(val) // 把这条数据存储到数组中的第一个位置上
  if (maxlen && arr.length > maxlen) {
    // 如果有条数限制并且数组的个数大于限制数
    arr.pop() // 方法将删除 arrayObject 的最后一个元素，把数组长度减 1，并且返回它删除的元素的值

  }
}

// 开源storage的库，对localstorage和sessionstorage的封装
import storage from 'good-storage'

export function saveSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  /* 逻辑是最后一次搜索的结果放到搜索历史的第一个 */
  insertArray(searches, query, (item) => {
    return item === query // 这是传入的一个比较函数 说明query在这个数组中
  }, SEARCH_MAX_LENGTH)
  storage.set(SEARCH_KEY, searches)
  return searches
}
